package com.magic.gre;

import java.util.Map;

import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;

/**
 * Author: Lmoumou
 * Date: 2019-01-15 10:20
 * 文件名: Api
 * 描述:
 */
public interface Api {

    /**
     * banner
     *
     * @return
     */
    @GET("banner/list")
    Observable<ResponseBody> bannerList();

    /**
     * 获取验证码
     *
     * @param phone
     * @return
     */
    @FormUrlEncoded
    @POST("user/sendVerifyLoginSMS")
    Observable<ResponseBody> smsCode(@Field("phone") String phone,
                                     @Field("type") int type);

    /**
     * 首页选项卡
     *
     * @return
     */
    @POST("article/getOption")
    Observable<ResponseBody> getOption();

    /**
     * 登陆
     *
     * @param parmsMap
     * @return
     */
    @FormUrlEncoded
    @POST("user/login")
    Observable<ResponseBody> login(@FieldMap Map<String, Object> parmsMap);

    /**
     * 重置密码
     *
     * @param phone
     * @param newPwd
     * @return
     */
    @FormUrlEncoded
    @POST("user/resetPwd")
    Observable<ResponseBody> resetPwd(@Field("phone") String phone,
                                      @Field("newPwd") String newPwd);

    /**
     * 注册
     *
     * @param parmsMap
     * @return
     */
    @FormUrlEncoded
    @POST("user/save")
    Observable<ResponseBody> register(@FieldMap Map<String, Object> parmsMap);

    /**
     * 提交引导数据
     *
     * @param parmsMap
     * @return
     */
    @FormUrlEncoded
    @POST("user/saveGuide")
    Observable<ResponseBody> saveGuide(@FieldMap Map<String, Object> parmsMap);

    /**
     * 生词本
     *
     * @param pageNo
     * @param pageSize
     * @param search
     * @return
     */
    @GET("unripe/list")
    Observable<ResponseBody> newWordsList(@Query("pageNo") int pageNo,
                                          @Query("pageSize") int pageSize,
                                          @Query("search") String search);

    /**
     * 熟词本
     *
     * @param pageNo
     * @param pageSize
     * @param search
     * @return
     */
    @GET("cooked/list")
    Observable<ResponseBody> ripeWordsList(@Query("pageNo") int pageNo,
                                           @Query("pageSize") int pageSize,
                                           @Query("search") String search);

    /**
     * 获取单元的单词列表
     *
     * @param unitId
     * @return
     */
    @FormUrlEncoded
    @POST("unit/unitDetails")
    Observable<ResponseBody> unitDetails(@Field("unitId") String unitId);

    /**
     * 生词本添加，取消
     *
     * @param vocabularyId
     * @return
     */
    @FormUrlEncoded
    @POST("unripe/save")
    Observable<ResponseBody> unripeSave(@Field("vocabularyId") String vocabularyId);

    /**
     * 熟词本添加取消
     *
     * @param vocabularyId
     * @return
     */
    @FormUrlEncoded
    @POST("cooked/save")
    Observable<ResponseBody> cookedSave(@Field("vocabularyId") String vocabularyId);

    /**
     * 学习记录列表
     *
     * @param pageNo
     * @param pageSize
     * @return
     */
    @GET("learnRecord/list")
    Observable<ResponseBody> learnRecordList(@Query("pageNo") int pageNo,
                                             @Query("pageSize") int pageSize);

    /**
     * 词本列表
     *
     * @return
     */
    @GET("thesaurus/list")
    Observable<ResponseBody> thesaurusList();

    /**
     * 单元列表
     *
     * @param thesaurusId
     * @return
     */
    @GET("unit/list?pageSize=100&pageNo=1")
    Observable<ResponseBody> unitList(@Query("thesaurusId") String thesaurusId);

    /**
     * 题目列表
     *
     * @param unitId
     * @return
     */
    @FormUrlEncoded
    @POST("subject/getSubs")
    Observable<ResponseBody> getSubs(@Field("unitId") String unitId);

    /**
     * 熟词本恢复
     *
     * @param ids
     * @return
     */
    @FormUrlEncoded
    @POST("cooked/del")
    Observable<ResponseBody> ripeDel(@Field("id") String ids);

    /**
     * 单词查询
     *
     * @param search
     * @return
     */
    @FormUrlEncoded
    @POST("vocabulary/search")
    Observable<ResponseBody> search(@Field("search") String search);

    /**
     * 统计学习的单词
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("learnRecord/save")
    Observable<ResponseBody> recordSave(@Field("vocabularyId") String id,
                                        @Field("unitId") String unitId);


    /**
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("learnRecord/update")
    Observable<ResponseBody> learnRecordUpdate(@Field("id") String id);

    /**
     * @return
     */
    @POST("learnRecord/create")
    Observable<ResponseBody> create();

    /**
     * 获取语音包下载地址
     *
     * @param id
     * @return
     */
    @GET("resources/getAddress")
    Observable<ResponseBody> getAddress(@Query("id") String id);

    /**
     * 活动列表
     *
     * @param pageNo
     * @param pageSize
     * @return
     */
    @FormUrlEncoded
    @POST("activity/list")
    Observable<ResponseBody> activityList(@Field("pageNo") int pageNo,
                                          @Field("pageSize") int pageSize);

    @FormUrlEncoded
    @POST("activity/myActs")
    Observable<ResponseBody> myActs(@Field("pageNo") int pageNo,
                                    @Field("pageSize") int pageSize);

    /**
     * 活动详情
     *
     * @param activityId
     * @return
     */
    @FormUrlEncoded
    @POST("activity/actDetail")
    Observable<ResponseBody> actDetail(@Field("activityId") String activityId,
                                       @Field("device") String device);

    /**
     * 活动报名
     *
     * @param activityId
     * @param wechatNum
     * @return
     */
    @FormUrlEncoded
    @POST("activity/actApply")
    Observable<ResponseBody> actApply(@Field("activityId") String activityId,
                                      @Field("wechatNum") String wechatNum);


    /**
     * 统计数据
     *
     * @return
     */
    @POST("Statistical/info")
    Observable<ResponseBody> statisticalInfo();

    /**
     * 获取用户信息
     *
     * @return
     */
    @GET("user/findById")
    Observable<ResponseBody> userInfo();

    /**
     * 修改个人资料
     *
     * @param parmsMap
     * @return
     */
    @FormUrlEncoded
    @POST("user/changeInfo")
    Observable<ResponseBody> changeInfo(@FieldMap Map<String, Object> parmsMap);

    /**
     * 修改手机号
     *
     * @param phone
     * @param securityCode
     * @return
     */
    @FormUrlEncoded
    @POST("user/changePhone")
    Observable<ResponseBody> changePhone(@Field("phone") String phone,
                                         @Field("securityCode") String securityCode);

    /**
     * 意见反馈
     *
     * @param content
     * @param contact
     * @return
     */
    @FormUrlEncoded
    @POST("feedback/save")
    Observable<ResponseBody> feedback(@Field("content") String content,
                                      @Field("contact") String contact);

    /**
     * 单词详情
     *
     * @param id
     * @return
     */
    @GET("vocabulary/get/{id}")
    Observable<ResponseBody> wordsDetails(@Path("id") String id);

    /**
     * 今日已学单词数量
     *
     * @return
     */
    @POST("Statistical/countToday")
    Observable<ResponseBody> countToday();

    /**
     * 答案结果统计
     *
     * @param unitId
     * @param right
     * @param cost_time
     * @return
     */
    @FormUrlEncoded
    @POST("subject/submitResult")
    Observable<ResponseBody> submitResult(@Field("unitId") String unitId,
                                          @Field("right") int right,
                                          @Field("costTime") long cost_time,
                                          @Field("total") int total);

    /**
     * @param url
     * @param map
     * @return
     */
    @GET
    Observable<ResponseBody> wxAccessToken(@Url String url,
                                           @QueryMap Map<String, Object> map);


    /**
     * @param url
     * @param access_token
     * @param openid
     * @return
     */
    @GET
    Observable<ResponseBody> wxUserinfo(@Url String url,
                                        @Query("access_token") String access_token,
                                        @Query("openid") String openid);

    /**
     * 微信登陆
     *
     * @param openId
     * @return
     */
    @FormUrlEncoded
    @POST("user/wxLogin")
    Observable<ResponseBody> wxLogin(@Field("openId") String openId);

    /**
     * 绑定微信
     *
     * @param parmsMap
     * @return
     */
    @FormUrlEncoded
    @POST("user/wxBind")
    Observable<ResponseBody> wxBind(@FieldMap Map<String, Object> parmsMap);

    /**
     * 学习进度统计
     *
     * @param unitId
     * @return
     */
    @FormUrlEncoded
    @POST("unit/lastUnit")
    Observable<ResponseBody> lastUnit(@Field("unitId") String unitId);


}
